ECOLE D’ETE CIST 2022

Inventaire préparatoire des données

Claude Grasland (Université de Paris (Diderot), UMR 8504 Géographie-cités, FR 2007 CIST)

Hugues Pecout (FR 2007 CIST)

featured

1 INTRODUCTION

L’objectif de ce document est d’examiner quelles sources en accès libre pourraient être utilisées pour la préparation de l’école d’été du CIST afin de construire des modules pédagogiques qui seront mis en ligne à une date mais pourront ensuite être régulièrement mises à jour.

Nous avons choisi de nous focaliser sur l’exemple des données relatives au Benin puisque ce pays accueillera la seconde phase du projet,mais l’idée est évidemment de pouvoir constituer des tableaux comparables dans chacun des pays concernés (Togo, Côte d’Ivoire, Niger, Burkina faso, Mali, Sénégal, …) au prix d’éventuelles adaptations.

Les tableaux de données sont sélectionnées prioritairement sur leurs qualités pédagogiques c’est-à-dire leur intérêt pour apprendre les méthodes de statistique, cartographie ou analyse spatiale. Mais il est évidemment souhaitable que ces données possèdent également un intérêt thématique et que le formateur puisse proposer des interprétations des résultats. Et il faut évidemment éviter que ces données comportent des erreurs ou véhiculent des informations fausses.

C’est la raison pour laquelle la sélection initiale effectuée par un enseignant-chercheur éloigné du terrain devra impérativement être validée par des spécialistes du pays concerné, aussi bien en termes pédagogiques que thématiques.

Ce document de travail est organisé en deux parties correspondant à deux échelles d’analyse :

  • les données infranationales permettent d’analyse les variations internes du territoire du Benin que ce soit dans le cadre de mailles administratives (régions, départements, communes), d’unités ponctuelles (villes, marchés, …) ou de grilles de collecte (carroyage, données satellitaires, …)

  • les données supranationales permettent a contrario de positionner le Benin considéré comme une seule entité vis à vis d’autres pays à l’échelle d’une région (e.g. CEDEAO), d’un continent (Afrique), voire du Monde entier.

Ce document n’est évidemment pas exhaustif et devra être complété par d’autres chercheurs, notamment s’agissant des données d’enquête (e.g. EDS) ou des relevés de terrain (GPS, kobo toolbox, …)

2 DONNEES INFRANATIONALES

2.1 La source HDX (Humanitarian Data Exchange)

Il s’agit d’une source majeure qui semble utilisable dans tous les pays.

Le sigle OCHA désigne le United Nation Office for the Coordination of Human Affairs dont la vocation est de fournir une aide dans les situations d’urgence. Sa mission qui est expliquée en détail sur son site web comporte de nombreux volets. Cette agence est organisée sur un plan régional et comporte notamment une délégation spécialisée dans les pays d’Afrique Centrale et de l’Ouest appelée OCHA-ROWCA qui couvre l’ensemble despays ciblés par l’école d’été du CIST.

Pour mener à bien ses actions l’OCHA-ROWCA a développé un grand nombre de bases de données qui sont mises à jour régulièrement avec un accès à première vue facile. Ces données sont accessiblesà travers la plateforme Humanitarian Data Exchange (HDX) qui semble avoir été mise au point par OCHA. Cette plateforme HDX ne comporte pas seulement des données mais aussi différents outils de visualisation ou d’analyse.

Cela pourrait donc constituer une source majeure de données pour l’école d’été CIST 2022-2023, mais il faut en faire un inventaire précis. L’objet de cette note est de procéder à quelques explorations préliminaires en prenant comme cible le Bénin.

Si nous effectuons une requête Benin sur le site de données HDX ce qui conduit à une liste de 142 sources de données provenant soit de OCHA-ROWCA, soit d’autres agences des Nations-Unies (FAO, WorldBank, WolrdPop, …). On trouve encore plus de sources (environ 200) si on utilise le menu de recherche par pays car le moteur ajoute dans ce cas des bases de données transnationales.

Le HDX est donc un véritable hub de concentration des données les plus récentes sur les pays qui nousintéressent pour l’école d’été, et pas seulement le Benin.

knitr::include_graphics("data/figures/HDX.png")

Comme on ne peut tout explorer d’un coup, nous commençons par les données qui viennet à proprement parler d’OCHA-ROWCA.

Dans les sections suivantes nous proposons de rassembler des tableaux de données harmonisées en vue de l’école d’été CIST 2022. Nous privilégions l’exemple du Bénin qui sera le lieu de la formation. Chaque tableau de données fait l’objet d’un exemple rapide d’application de méthodes statistiques ou carographiques afin de vérifier la fiabilité et la qualité des données

2.2 Limites administratives

2.2.1 Métadonnées

Le dossier des limites administratives du Benin fourni par HDX (cliquer ici) est accessible au format shapefile et comporte différentes couches correspondant aux différents niveaux administratifs. Sa datation laisse augurer qu’il s’agit de la situation la plus récente: les fichiers datent de juin 2021 mais leur nom comporte la séquence “20190816” qui doit plutôt correspondre au 16 Août 2019. En pratique, les limites sont celles du recensement de 2013.

N.B. nous avons toutefois découvert une erreur importante dans le code de la commune d’Adjara qui est noté BJ0101 alors que le code exact est BJ1001. Nous avons également constaté une variabilité des noms de vraiables désignant les codes dans la base OCHA. C’est pourquoi nous avons préféré harmoniser les fichiers.

adm0<-st_read("data/admin/ben_adm0.shp",quiet = TRUE)
  adm1<-st_read("data/admin/ben_adm1.shp",quiet = TRUE)
  adm2<-st_read("data/admin/ben_adm2.dbf", quiet = TRUE)

2.2.2 Exemple d’application

Pour vérifier la qualité des fichiers nous effectuons un calage sur un fonds de carte OpenStreetMap à l’aide du package leaflet :

map <- leaflet() %>% 
              addTiles() %>%
              setView(lat = 8, lng=2.1, zoom = 6) %>%
                addPolygons(data = adm2,
                            label = ~ADM2_NAME,
                            highlightOptions = TRUE,
                             fill = TRUE,
                             color = "orange",
                             weight = 3 ) %>%
               addPolygons(data = adm1,
                          fill = FALSE,
                          color = "red",
                          weight = 2) %>%
               addPolygons(data = adm0,
                          fill = FALSE,
                          color = "black",
                          weight = 1) 
    
  
  map

Superposition des fonds de carte sur OSM

2.3 Pyramide des âges 2019

2.3.1 Métadonnées

Un dossier du HDX accessible ici fournit les populations par âge et par sexe en 2019 au niveau des communes, départements ou pays entier. Il s’agit naturellement d’estimations mais les données n’en sont pas moins très utile pour toute analyse travaillant sur les situations présentes. Les classes d’âges sont suffisamment détaillées (tranches de 5 ans de 0 à 80 ans) pour procéder à des analyses démographiques intéressantes.

2.3.2 Exemple d’application

A titre de vérification, on réalise une analyse factorielle des correspondances AFC sur la pyramide des âges des 77 communes

don<-read.table("data/pop2019/ben_adm2_pop.csv", sep=";",header=T, encoding = "UTF-8")
  don2<-don[,c(11:44)]
  row.names(don2)<-don$ADM2_PCODE
  
  afc<-CA(don2,ncp = 10,graph = FALSE)
  library(explor)
  res <- explor::prepare_results(afc)
  explor::CA_var_plot(res, xax = 1, yax = 2, lev_sup = FALSE, var_sup = FALSE,
      var_sup_choice = , var_hide = "Row", var_lab_min_contrib = 0, col_var = "Position",
      symbol_var = NULL, size_var = NULL, size_range = c(10, 300), labels_size = 10,
      point_size = 56, transitions = TRUE, labels_positions = "auto", xlim = c(-0.234,
          0.332), ylim = c(-0.187, 0.38))

AFC sur les structures par âge et sexe des communes du Benin en 2019 (Source : OCHA-ROWCA)

On enchaîne par une CAH (sur les axes de l’AFC) :

cah <- HCPC(afc,nb.clust = 5,graph = FALSE)
  plot.HCPC(cah,choice = "tree")
Type de structures par âge et sexe des communes du Benin en 2019 (source : OCHA)

Type de structures par âge et sexe des communes du Benin en 2019 (source : OCHA)

plot.HCPC(cah,choice = "map", label.cex=0.3)
Position des classes de la CAH sur les axes de l'AFC (source : OCHA)

Position des classes de la CAH sur les axes de l’AFC (source : OCHA)

Il reste à visualiser les classes. On crée pour cela une fonction assez complexe de comparaison entre le profil de celles-ci et le profil du Bénin, inspirée d’un programme trouvé sur un forum du CIRAD

Profils moyens des classes (source : OCHA)

Profils moyens des classes (source : OCHA)

  • la classe 1 : correspond à une population beaucoup plus jeune que la moyenne du pays avec un excédent de 0-9 ans et un déficit de 30 ans et plus. C’est la partie du pays où la transition démographique semble être la plus tardive
  • la classe 2 : présente également un profil de population jeune avec un excédent de 5-14 ans, mais se caractérise par une réduction relative des 0-4 ans qui témoigne soit d’une baisse de la fécondité, soit d’un exode rural des jeunes ménages avec enfants.
  • la classe 3 correspond au profil moyen du pays.
  • la classe 4 est caractérisée par un excédent de personnes âgées et un déficit à la fois de jeunes enfants et de jeunes adultes. Elle correspond à des zones de vieillissment relatif de la population, soit sous l’effet de l’exode rural, soit en raison d’une baisse de la fécondité.
  • la classe 5 est caractérise par une forte surreprésentation des jeunes adultes et des persones âgées, associée à un net déficit des enfants jeunes de 0 à 14 ans. Il s’agit vraisemblablement de zones urbaines caractérisées par une fécodité plus tardive et une meilleure espérance de vie.

On peut visualiser la distribution de ces cinq classes sur une carte :

Distribution spatiale des classes (source : OCHA)

Distribution spatiale des classes (source : OCHA)

2.4 Alphabetisation et langues (2013)

2.4.1 Métadonnées

Ce fichier qui est accessible sur HDX en suivant ce lien a été mis à disposition par l’organisation Translators without borders mais l’analyse des métadonnées montre qu’il s’agit en fait de données extraites du recensement géénral de population du Bénin de 2013 :

Created by Translators without Borders, Uploaded on Jun-21, Version 1

Notes and caveats

  • All data is drawn from government survey results and is subject to any associated limitations or distortions present in the source data.
  • Literacy was measured as the ability to read and write in any language. Languages with population shares less than 0.01% or under 1,000 people (whichever is greater) have been aggregated into the “Other” field.
  • All decimal values have been rounded to a maximum of 3 decimal places. As a result language shares may not total 100%.
  • Empty values represent non-existent data and should not be treated as zero values. Data is available under an Attribution NonCommercial ShareAlike 4.0 International license (CC BY NC SA 4.0)

Copyright and terms of use

  • You are free to share and adapt the data subject to requirements for attribution and non commercial use.
  • Any derivative work must be distributed under the same license as the original. Full terms at https://creativecommons.org/licenses/by nc sa/4.0/

Les fichiers fournies comportaient de petites erreurs ou des difficultés de formatage rendant compliquée leur importation dans R. Il a donc fallu les corriger un peu avant de les utiliser. Une fois cela effectué, on a vérifié que les données pouvaient se cartographie en effectuant une jointure avec le fichier administratif au niveau communal.

N.B. nous avons retrouvé l’erreur dans le code de la commune d’Adjara qui est noté BJ0101 alors que le code exact est BJ1001. Nous avons donc reconstruit les fichiers en les harmonisant avec les fonds de carte.

2.4.2 Exemple d’application

Le fichier comporte un ensemble de variables concernant le niveau d’alphabétisation des hommes et des femmes de plus de 6 ans en 2013. Voici à titre indicatif les valeurs par département et pour l’ensemble du pays :

dep<-read.table("data/langues/ben_lang_adm1_correct.csv", sep=";",header =TRUE, dec=",")
  dep<-dep[,c(1:2,77:82)]
  kable(dep)
ADM1_CODE ADM1_NAME pop_total pop_male pop_female literacy_all literacy_male literacy_female
BJ01 Alibori 872500 435070 437430 0.2411522 0.2800548 0.2028016
BJ02 Atacora 786350 385520 400830 0.3697587 0.4450240 0.2987815
BJ03 Atlantique 1417420 699260 718160 0.6529884 0.7560399 0.5546867
BJ04 Borgou 1228980 611910 617070 0.4172042 0.4703573 0.3647056
BJ05 Collines 717580 355000 362580 0.5494504 0.6415866 0.4607534
BJ06 Couffo 747530 347990 399540 0.5146621 0.6490924 0.4019793
BJ07 Donga 547790 271290 276500 0.4165344 0.4913587 0.3443179
BJ08 Littoral 683970 328190 355780 0.7939093 0.8747998 0.7209568
BJ09 Mono 506620 246530 260090 0.6348241 0.7547283 0.5222640
BJ10 Oueme 1103370 536610 566760 0.6400245 0.7459637 0.5422918
BJ11 Plateau 627710 302360 325350 0.4621522 0.5612206 0.3719805
BJ12 Zou 857110 411050 446060 0.5354925 0.6407501 0.4412843

Ce tableau se prêtera particulièrement bien à des exercices d’initiation à la statistiques et la cartographie sous R puisqu’il comporte à la fois des stocks (population par sexe), des taux (% de population alphabétisée par sexe) et une possibilité de les combiner pour retrouver le nombre de personnes alphabétisée. Il s’inscrit par ailleurs pleinement dans la thématique des inégalités territoriales.

On peut à titre d’exemple construire une cartographie du niveau d’alphabétisation des hommes et des femmes par département du Bénin en 2013 (carte choroplèthe) et superposer par dessus les effectifs correspondants d’hommes et de femmes alphabétisés.

Alphabétisation des hommes et femmes du Bénin par département en 2013 (source : RP Bénin 2013, via OCHA)

Alphabétisation des hommes et femmes du Bénin par département en 2013 (source : RP Bénin 2013, via OCHA)

On voit apparaître alors une assez forte corrrélation entre les deux distributions, même si les femmes sont moins alphabétisés que les hommes. Ce qui suggère un exercice d’apprentissage de la régression linéaire entre les deux variables.

mod.reg <- lm(dep$literacy_female~dep$literacy_male)
  #stargazer(mod.reg,type = "html")
  ggplot(data = dep) + aes(x=100*literacy_male, y = 100*literacy_female, label = ADM1_NAME) +
                       geom_point(col="red") + 
                       geom_smooth(method="lm") +
                       geom_text(cex=3, nudge_y=2) +
                       scale_x_continuous("Taux d'alphabétisation des hommes (%)") +
                       scale_y_continuous("Taux d'alphabétisation des femmes (%)") +
                       ggtitle("Inégalités d'alphabétisation des départements du Benin par sexe",
                               subtitle = "Source : RP 2013 via OCHA")

Les résultats mettent en évidence le fait que l’alphabétisation des femmes au Bénin en 2013 est en moyenne inférieure de 20% à celle des hommes (le paramètre b de la régression est non significatif) et la relation est statistiquement très significative (r2 = 93 %, p < 0.001). Il existe notamment des résidus c’est-à-dire des départements où la scolarisation des femmes estimée en fonction de celle des hommes est plus forte que prévue (Alibori, Borgou, Littoral) ou plus faible que prévue (Plateau, Couffo, Mono).

Le même modèle appliqué au niveau des communes permettrait une analyse plus fine des résultats à travers une carte des résidus. On pourrait aussi imaginer une analyse mutiscalaire croisant les écarts des communes à la moyenne du pays, de leur département et des communes voisines à l’aide du package mta. Bref, il s’agit sans nul doute d’un excellent exemple pédagogique pour l’école d’été CIST2022.

2.5 Prix de la nourriture sur les marchés (2002-2021)

2.5.1 Métadonnées

Ce fichier qui est accessible sur HDX en suivant ce lien a été mis à disposition par World Food Programme. Cette base qui semble avoir été interrompue présente l’avantage d’offrir une grande profondeur historique et une résolution spatialetrès précise puisque les prix sont localisés par marché et par semaine.

This no longer updated dataset contains Global Food Prices data from the World Food Programme covering foods such as maize, rice, beans, fish, and sugar for 76 countries and some 1,500 markets. It is updated weekly but contains to a large extent monthly data. The data goes back as far as 1992 for a few countries, although many countries started reporting from 2003 or thereafter.

Le fichier contenant les coordonnées de latitude et de longitude des marchés, il peut théoriquement être cartographié facilement à l’aide d’un outil de cartographie dynamique tel que mapview. Mais il peut aussi faire l’objet de multiples agrégations spatiales, temporelles, par produit. Reste évidemment à en apprécier la qualité …

Noter qu’il est nécessaire d’éliminer la seconde ligne du tableau initial sous excel pour pouvoir ensuite charger correctement le fichier. Il est également préférable de lire le fichier avec la fonction fread() du package data.table faut de quoi on peut avoir des problèmes d’encodage plus ou moins délicats à résoudre.

dt<-fread("data/foodprices/wfp_food_prices_ben.csv")
  kable(head(dt))
date admin1 admin2 market latitude longitude category commodity unit priceflag pricetype currency price usdprice
2002-01-15 Alibori Malanville Malanville (CBM) 11.86 3.38 cereals and tubers Maize KG actual Wholesale XOF 145.00 0.2503
2002-01-15 Alibori Malanville Malanville (CBM) 11.86 3.38 cereals and tubers Millet KG actual Wholesale XOF 145.00 0.2503
2002-01-15 Alibori Malanville Malanville (CBM) 11.86 3.38 cereals and tubers Rice (imported) KG actual Wholesale XOF 293.33 0.5064
2002-01-15 Alibori Malanville Malanville (CBM) 11.86 3.38 cereals and tubers Sorghum KG actual Wholesale XOF 141.67 0.2446
2003-01-15 Alibori Malanville Malanville (CBM) 11.86 3.38 cereals and tubers Maize KG actual Wholesale XOF 106.00 0.1830
2003-01-15 Alibori Malanville Malanville (CBM) 11.86 3.38 cereals and tubers Millet KG actual Wholesale XOF 116.00 0.2002

On peut assez facilement spatialiser le fichier qui comporte en tout 51 marchés assez bien répartiis sur l’ensemble du pays comme le montre la carte ci-desous :

loc<-dt %>% filter(duplicated(market)==FALSE) %>% select(c(2,3,4,5,6)) %>% arrange (admin1,admin2, market)
  markets <- st_as_sf(loc, coords = c("longitude","latitude"))
  st_crs(markets)<- 4326
  #mapview(markets)
  
  
  adm0<-st_read("data/admin/ben_adm0.shp",quiet = TRUE)
  adm1<-st_read("data/admin/ben_adm1.shp",quiet = TRUE)
  adm2<-st_read("data/admin/ben_adm2.shp", quiet = TRUE)
  
  par(mar=c(0,0,0,0))
  plot(adm2$geometry,col="gray90", border = "gray20",lwd=0.5)
  plot(adm1$geometry,col=NA, border = "black",lwd=1, add=TRUE)
  plot(adm0$geometry,col=NA, border = "black",lwd=2, add=TRUE)
  plot(markets$geometry,col="red", bg="yellow",pch=21,add=TRUE,cex=0.7)

2.5.2 Exemple d’application

Cette base de données multidimensionelle peut servir d’exemple pour de nombreux exercices d’apprentissage de la statistique et de la cartographie sous R. Le prix des produits alimnentaires dépend en effet :

  • du type de produit (QUOI) ?
  • de la date d’achat (QUAND) ?
  • du lieu d’achat (OU ?)

Pour chacune des dimensions, on peut réaliser des procédures d’agrégation des valeurs observées ou d’estimation des valeurs manquantes. A titre d’exemple, on extrait de la base de donnée l’ensemble des lignes qui concernent le riz

riz<- dt %>% filter(substr(commodity,1,4)=="Rice") %>% 
                 select(when = date, 
                        where1 = admin1,
                        where2 = admin2,
                        where3 = market,
                        what = commodity,
                        cost = usdprice )
  kable(head(riz))
when where1 where2 where3 what cost
2002-01-15 Alibori Malanville Malanville (CBM) Rice (imported) 0.5064
2003-01-15 Alibori Malanville Malanville (CBM) Rice (imported) 0.4972
2003-02-15 Alibori Malanville Malanville (CBM) Rice (imported) 0.5136
2003-03-15 Alibori Malanville Malanville (CBM) Rice (imported) 0.4877
2003-04-15 Alibori Malanville Malanville (CBM) Rice (imported) 0.4963
2003-05-15 Alibori Malanville Malanville (CBM) Rice (imported) 0.5006

On peut calculer le prix median du riz sur l’ensemble des points de sondage disponibles en fonction de la catégorie de riz :

tab<- riz %>% group_by(when, what) %>% summarize(median_cost=median(cost), nbobs = n())
  ggplot(tab) + aes(x=when,y=median_cost, color=what, size=nbobs) + geom_point() + 
    scale_x_continuous("Données de prix mensuelles") + 
    scale_y_continuous("Prix médian d'un kilog de riz (en $)")+
    ggtitle(label = "Estimation des prix du riz au Bénin",subtitle = "Source : World Food Program (via HDX)")

Le graphique montre plusieurs choses :

  • les données les plus complètes concernent le riz importé qui augmente fortement au moment de la crise de 2007-2008
  • la spatialisation des données n’est pas vraiment possible avant 2015 voire 2018
  • il y a de fortes différences de prix selon le type de riz

Effectuons maintenant un zoom sur le priz médian du riz importé en 2020-2021 par régions :

tab <- riz %>% filter(when >=as.Date("2020-04-01"), what =="Rice (imported)") %>%
                 group_by(when,where1) %>%
                 summarize(median_cost=median(cost))
  ggplot(tab) + aes(x=when,y=where1, fill=median_cost) +geom_tile() + 
    scale_fill_gradient(low="white", high = "red")+
      scale_x_date("Médiane des valeurs observées par mois") + 
    scale_y_discrete("Département")+
    ggtitle(label = "Prix du riz importé sur les marchés du Benin ($/kg)",subtitle = "Source : World Food Program (via HDX)")

2.6 Villages et localités vers 2015

2.6.1 Métadonnées

Ce fichier accessible en cliquant ici concerne le peuplement, c’est-à-dire apparemment l’inventaire de toutes les localisations avec leur nom et leur position en latitude longitude. Il comporte 6306 entrées. Les fichiers sont datés de 2015.

loc<-st_read("data/settlement/ben_plp_NGA.shp", quiet = TRUE)
  par(mar=c(0,0,0,0))
  plot(adm2$geometry,col="lightyellow", border = "gray20",lwd=0.5)
  plot(loc$geometry,col="red",pch=16,cex=0.2, add=T)
Village et peuplement au Benin vers 2015 (Source : OCHA-ROWCA)

Village et peuplement au Benin vers 2015 (Source : OCHA-ROWCA)

2.6.2 Exemple d’application

A titre de vérification de la précision, nous effectuons une superposition sur le fonds de carte OpenStreetMap pour la commune de Ouidah (code BJ0304 ou BEN003004) ou aura lieu l’école d’été du CIST. En cliquant sur les points onpeut comparer leur nom avec celui des localités indiquées par OSM.

map<-adm2[adm2$admin2Pcod=="BJ0304",]
  map<-st_transform(map,4326)
  
  vil<-loc[loc$RowcaCode2=="BEN003004",]
  vil<-st_transform(vil,4326)
  
  
  map <- leaflet() %>% 
              addTiles() %>%
              setView(lat = 6.4, lng=2.1, zoom = 11) %>%
              addPolygons(data = map,
                          fill = FALSE,
                          color = "red",
                          weight = 2) %>%
               addMarkers(data = vil,
                          label = ~FULL_NAME_)
  
  map

Projection des données OCHA-ROWCA sur Open Street Map (commune de Ouidah

Il y a à l’évidence des décalages … Et le contour de la commune lui-même ne semble pas coller exactement avec celui fourni par OSM. Il faudra vérifier laquelle des deux sources est erronée (à moins que ce ne soient les deux ?). Toutefois, la localisation semble rester approximativement juste …

3 DONNEES INTERNATIONALES

Nous allons présenter ici deux packages R qui correspondent à des API permettant de télécharger respectivement des données statistiques de la Banque Mondiale et des fonds de carte Natural Earth. Chacune de ces API a été implémentée sous le forme de package R ce qui permet d’extraire facilement les données, dès lors qu’on dispose d’une connexion internet suffisante. Un intérêt évident de cette approche par API est de pouvoir effectuer facilement des requêtes sur n’importe quelle partie du monde et de pouvoir mettra à jour régulièrement les données au fur et à mesure de leur mise à jour.

A titre d’exemple, nous allons montrer comment réaliser une carte des émissions de CO2 par habitant des pays de la CEDEAO en 2018.

3.1 L’API Banque Mondiale

Supposons que l’on souhaite télécharger la population, le PIB et les émisssions de CO2 des pays du monde de 2000 à 2015. Plutôt que d’aller chercher des fichiers sur un site web, nous allons utiliser une API proposée par la Banque Mondiale qui permet de télécharger les données facilement et surtout de les mettre à jour régulièrement. Pour cela on va installer le package R correspondant à l’API wbstats de la Banque mondiale.

https://cran.r-project.org/web/packages/wbstats/vignettes/Using_the_wbstats_package.html

Au moment du chargement du package, il est créé un fichier wb_cachelist qui fournit l’ensemble des donnes disponibles sous la forme d’une liste de tableaux de méta-données.

library("wbstats")
  cat<-wb_cachelist
  str(cat,max.level = 1)
List of 8
   $ countries    : tibble [304 x 18] (S3: tbl_df/tbl/data.frame)
   $ indicators   : tibble [16,649 x 8] (S3: tbl_df/tbl/data.frame)
   $ sources      : tibble [63 x 9] (S3: tbl_df/tbl/data.frame)
   $ topics       : tibble [21 x 3] (S3: tbl_df/tbl/data.frame)
   $ regions      : tibble [48 x 4] (S3: tbl_df/tbl/data.frame)
   $ income_levels: tibble [7 x 3] (S3: tbl_df/tbl/data.frame)
   $ lending_types: tibble [4 x 3] (S3: tbl_df/tbl/data.frame)
   $ languages    : tibble [23 x 3] (S3: tbl_df/tbl/data.frame)

3.1.1 Le tableau “countries”

Il fournit des renseignements de base sur les différents pays, leurs codes, etc.

str(cat$countries)
tibble [304 x 18] (S3: tbl_df/tbl/data.frame)
   $ iso3c             : chr [1:304] "ABW" "AFG" "AFR" "AGO" ...
   $ iso2c             : chr [1:304] "AW" "AF" "A9" "AO" ...
   $ country           : chr [1:304] "Aruba" "Afghanistan" "Africa" "Angola" ...
   $ capital_city      : chr [1:304] "Oranjestad" "Kabul" NA "Luanda" ...
   $ longitude         : num [1:304] -70 69.2 NA 13.2 19.8 ...
   $ latitude          : num [1:304] 12.52 34.52 NA -8.81 41.33 ...
   $ region_iso3c      : chr [1:304] "LCN" "SAS" NA "SSF" ...
   $ region_iso2c      : chr [1:304] "ZJ" "8S" NA "ZG" ...
   $ region            : chr [1:304] "Latin America & Caribbean" "South Asia" "Aggregates" "Sub-Saharan Africa" ...
   $ admin_region_iso3c: chr [1:304] NA "SAS" NA "SSA" ...
   $ admin_region_iso2c: chr [1:304] NA "8S" NA "ZF" ...
   $ admin_region      : chr [1:304] NA "South Asia" NA "Sub-Saharan Africa (excluding high income)" ...
   $ income_level_iso3c: chr [1:304] "HIC" "LIC" NA "LMC" ...
   $ income_level_iso2c: chr [1:304] "XD" "XM" NA "XN" ...
   $ income_level      : chr [1:304] "High income" "Low income" "Aggregates" "Lower middle income" ...
   $ lending_type_iso3c: chr [1:304] "LNX" "IDX" NA "IBD" ...
   $ lending_type_iso2c: chr [1:304] "XX" "XI" NA "XF" ...
   $ lending_type      : chr [1:304] "Not classified" "IDA" "Aggregates" "IBRD" ...

Le tableau comporte 304 observation et il mélange des pays (France), des fragments de pays (Réunion) et des agrégats de pays (Europe). Il faudra donc bien faire attention lors de l’extraction à réfléchir à ce que l’on souhaite utiliser. Par exemple, si l’on veut juste les pays :

## Programme en langage R_base
  # pays<-cat$countries[cat$countries$income_level!="Aggregates",c("iso3c", "country","capital_city","longitude","latitude", "region","income_level")]
  
  
  ## Programme en langage dplyr
  
  pays <- cat$countries %>% 
            filter(income_level !="Aggregates") %>%
            select(iso3c,country, capital_city, latitude, longitude, region, income_level)
  
  
  kable(head(pays))
iso3c country capital_city latitude longitude region income_level
ABW Aruba Oranjestad 12.51670 -70.0167 Latin America & Caribbean High income
AFG Afghanistan Kabul 34.52280 69.1761 South Asia Low income
AGO Angola Luanda -8.81155 13.2420 Sub-Saharan Africa Lower middle income
ALB Albania Tirane 41.33170 19.8172 Europe & Central Asia Upper middle income
AND Andorra Andorra la Vella 42.50750 1.5218 Europe & Central Asia High income
ARE United Arab Emirates Abu Dhabi 24.47640 54.3705 Middle East & North Africa High income

3.1.2 Le tableau indicators

Il comporte pas loin de 17000 variables … Autant dire qu’il est difficile de l’explorer facilement si l’on ne sait pas ce que l’on cherche.

indic<-cat$indicators
  dim(indic)
[1] 16649     8
kable(head(indic))
indicator_id indicator unit indicator_desc source_org topics source_id source
1.0.HCount.1.90usd Poverty Headcount ($1.90 a day) NA The poverty headcount index measures the proportion of the population with daily per capita income (in 2011 PPP) below the poverty line. LAC Equity Lab tabulations of SEDLAC (CEDLAS and the World Bank). 11 , Poverty 37 LAC Equity Lab
1.0.HCount.2.5usd Poverty Headcount ($2.50 a day) NA The poverty headcount index measures the proportion of the population with daily per capita income (in 2005 PPP) below the poverty line. LAC Equity Lab tabulations of SEDLAC (CEDLAS and the World Bank). 11 , Poverty 37 LAC Equity Lab
1.0.HCount.Mid10to50 Middle Class ($10-50 a day) Headcount NA The poverty headcount index measures the proportion of the population with daily per capita income (in 2005 PPP) below the poverty line. LAC Equity Lab tabulations of SEDLAC (CEDLAS and the World Bank). 11 , Poverty 37 LAC Equity Lab
1.0.HCount.Ofcl Official Moderate Poverty Rate-National NA The poverty headcount index measures the proportion of the population with daily per capita income below the official poverty line developed by each country. LAC Equity Lab tabulations of data from National Statistical Offices. 11 , Poverty 37 LAC Equity Lab
1.0.HCount.Poor4uds Poverty Headcount ($4 a day) NA The poverty headcount index measures the proportion of the population with daily per capita income (in 2005 PPP) below the poverty line. LAC Equity Lab tabulations of SEDLAC (CEDLAS and the World Bank). 11 , Poverty 37 LAC Equity Lab
1.0.HCount.Vul4to10 Vulnerable ($4-10 a day) Headcount NA The poverty headcount index measures the proportion of the population with daily per capita income (in 2005 PPP) below the poverty line. LAC Equity Lab tabulations of SEDLAC (CEDLAS and the World Bank). 11 , Poverty 37 LAC Equity Lab

3.1.2.1 Recherche du code d’un indicateur

Supposons qu’on recherche les données récentes sur les émissions de CO2. On va utiliser le mot-clé CO2 pour rechercher les variables correspondantes dans le catalogue à l’aide de la fonction wbsearch, ce qui donne 45 réponses

vars <- wbsearch(pattern = "CO2",fields="indicator")
  kable(head(vars))
indicatorID indicator
5294 EN.ATM.CO2E.CP.KT CO2 emissions from cement production (thousand metric tons)
5295 EN.ATM.CO2E.EG.ZS CO2 intensity (kg per kg of oil equivalent energy use)
5296 EN.ATM.CO2E.FF.KT CO2 emissions from fossil-fuels, total (thousand metric tons)
5297 EN.ATM.CO2E.FF.ZS CO2 emissions from fossil-fuels (% of total)
5298 EN.ATM.CO2E.GDP CO2 emissions, industrial (kg per 1987 US$ of GDP)
5299 EN.ATM.CO2E.GF.KT CO2 emissions from gaseous fuel consumption (kt)

On va finalement trouver le code de la variable recherchée

  • EN.ATM.CO2E.KT : émissions de CO2 en kilotonnes

Les deux autres variables dont nous avons besoin ont pour code

  • NY.GDP.MKTP.CD : PIB en parités de pouvoir d’achat
  • SP.POP.TOTL : Population totale

3.1.2.2 Extraction des métadonnées

Une fois que l’on pense connaître le code de nos variables, on peut extraire les métadonnés pour vérifier qu’il s’agit bien de ce que l’on cherche, quelle est la source exacte, quelle est l’unité de mesure …

# Programme R-base
  meta<-cat$indicators[cat$indicators$indicator_id %in% c("SP.POP.TOTL","NY.GDP.MKTP.CD","EN.ATM.CO2E.KT"),]
  
  # Programme dplyr
  meta<-cat$indicators %>%
          filter(indicator_id %in% c("SP.POP.TOTL","NY.GDP.MKTP.CD","EN.ATM.CO2E.KT"))
  
  kable(meta)
indicator_id indicator unit indicator_desc source_org topics source_id source
EN.ATM.CO2E.KT CO2 emissions (kt) NA Carbon dioxide emissions are those stemming from the burning of fossil fuels and the manufacture of cement. They include carbon dioxide produced during consumption of solid, liquid, and gas fuels and gas flaring. Carbon Dioxide Information Analysis Center, Environmental Sciences Division, Oak Ridge National Laboratory, Tennessee, United States. 19 , 6 , Climate Change, Environment 2 World Development Indicators
NY.GDP.MKTP.CD GDP (current US$) NA GDP at purchaser’s prices is the sum of gross value added by all resident producers in the economy plus any product taxes and minus any subsidies not included in the value of the products. It is calculated without making deductions for depreciation of fabricated assets or for depletion and degradation of natural resources. Data are in current U.S. dollars. Dollar figures for GDP are converted from domestic currencies using single year official exchange rates. For a few countries where the official exchange rate does not reflect the rate effectively applied to actual foreign exchange transactions, an alternative conversion factor is used. World Bank national accounts data, and OECD National Accounts data files. 3 , Economy & Growth 2 World Development Indicators
SP.POP.TOTL Population, total NA Total population is based on the de facto definition of population, which counts all residents regardless of legal status or citizenship. The values shown are midyear estimates. (1) United Nations Population Division. World Population Prospects: 2019 Revision. (2) Census reports and other statistical publications from national statistical offices, (3) Eurostat: Demographic Statistics, (4) United Nations Statistical Division. Population and Vital Statistics Reprot (various years), (5) U.S. Census Bureau: International Database, and (6) Secretariat of the Pacific Community: Statistics and Demography Programme. 19 , 8 , Climate Change, Health 2 World Development Indicators

3.1.3 L’extraction des données

Elle se fait à l’aide de la fonction wb_data qui comporte de nombreuses options.

3.1.3.1 le paramètre indicator =

Ce paramètre permet de choisir les indicateurs à collecter, ce qui suppose que l’on connaisse leur code. Par exemple, supposons que l’on veuille extraire la population et le PIB pour pouvoir calculer ensuite le PIB par habitant

df   <- wb_data(indicator  = c("NY.GDP.MKTP.CD","SP.POP.TOTL", "EN.ATM.CO2E.KT"))
  • commentaire : Nous obtenons un tableau très grand (> 13000 lignes) qui comporte les valeurs pour toutes les dates disponibles depuis 1960 et pour tous les pays, même si les valeurs sont souvent manquantes.

3.1.4 le choix d’une période de temps

3.1.4.1 les paramètres startdate = et startdate =

Ces deux paramètres permettent de choisir une plage de temps. On peut par exemple décider de ne collecter que les données relatives aux années 2017, 2018 et 2019

df   <- wb_data(indicator  = c("NY.GDP.MKTP.CD","SP.POP.TOTL", "EN.ATM.CO2E.KT"),
                  start_date = 2017,
                  end_date = 2019)
  dim(df)
[1] 651   7
kable(head(df,6))
iso2c iso3c country date EN.ATM.CO2E.KT NY.GDP.MKTP.CD SP.POP.TOTL
AW ABW Aruba 2017 NA 3092430168 105361
AW ABW Aruba 2018 NA 3202188607 105846
AW ABW Aruba 2019 NA NA 106310
AF AFG Afghanistan 2017 7380 18753469630 36296111
AF AFG Afghanistan 2018 7440 18053228579 37171922
AF AFG Afghanistan 2019 NA 18799450743 38041757
  • commentaire : Le tableau ne comporte donc plus que 651 lignes correspondant aux trois dates pour les différents pays du Monde.

3.1.4.2 Le paramètre mrv (most recent value)

Lorsque l’on souhaite juste obtenir les données les plus récentes, on peut remplacer les paramètres startdate = et startdate = par le paramètre mrv = suivit d’un chiffre indiquant le nombre d’années que l’on souhaite à partir de la date la plus récente. Avec mrv=1 on récupère uniquement la dernière année disponible pour au moins l’une des variables.

df   <- wb_data(indicator  = c("NY.GDP.MKTP.CD","SP.POP.TOTL","EN.ATM.CO2E.KT"),
                  mrv = 1)
  dim(df)
[1] 434   7
kable(head(df,6))
iso2c iso3c country date EN.ATM.CO2E.KT NY.GDP.MKTP.CD SP.POP.TOTL
AW ABW Aruba 2018 NA NA NA
AW ABW Aruba 2020 NA NA 106766
AF AFG Afghanistan 2018 7440 NA NA
AF AFG Afghanistan 2020 NA 20116137326 38928341
AO AGO Angola 2018 27340 NA NA
AO AGO Angola 2020 NA 58375976293 32866268

L’inconvénient de cette méthode est que cela peut aboutir à un grand nombre de valeurs manquantes si l’une des variables recherchée n’a pas été mise à jour. Il est donc préférable de sélectioner une période plus longue mrv=5 et de faire ensuite soi-même le tri

3.1.5 Le choix des unités géographiques

Le paramètre country = permet de choisir les entités spatiales à collecter, soit sous forme de liste de codes, soit à l’aide de valeurs spéciales. Par défaut; il renvoie la liste de tous les pays, mais on peut se limiter à quelques uns seulement à l’aide de leur nom en anglais (risqué …) ou de leur code ISO3 (plus sûr)

3.1.5.1 sélection de pays

df   <- wb_data(indicator  = c("NY.GDP.MKTP.CD","SP.POP.TOTL","EN.ATM.CO2E.KT"),
                  start_date = 2018,
                  end_date = 2018,
                  country = c("BEN","TGO"))
  df$GDP.per.capita <- round(df$NY.GDP.MKTP.CD / df$SP.POP.TOTL,0)
  df$CO2.per.capita <- round(1000*df$EN.ATM.CO2E.KT / df$SP.POP.TOTL,2)
  kable(head(df,6))
iso2c iso3c country date EN.ATM.CO2E.KT NY.GDP.MKTP.CD SP.POP.TOTL GDP.per.capita CO2.per.capita
BJ BEN Benin 2018 7910 14262407012 11485035 1242 0.69
TG TGO Togo 2018 2260 7112200725 7889095 902 0.29
  • commentaire : Il est donc facile de travailler sur un petit nombre de pays que l’on souhaite comparer.

3.1.5.2 Opérateurs spéciaux

Il existe un certain nombre de paramètres spéciaux que l’on peut utiliser à la place de la liste des pays :

  • “countries_only” (Default)
  • “regions_only”
  • “admin_regions_only”
  • “income_levels_only”
  • “aggregates_only”
  • “all”
df   <- wb_data(indicator  = c("NY.GDP.MKTP.CD","SP.POP.TOTL","EN.ATM.CO2E.KT"),
                  start_date = 2018,
                  end_date = 2018,
                  country = "regions_only")
  df$GDP.per.capita <- round(df$NY.GDP.MKTP.CD / df$SP.POP.TOTL,0)
  df$CO2.per.capita <- round(1000*df$EN.ATM.CO2E.KT / df$SP.POP.TOTL,2)
  kable(df)
iso2c iso3c country date EN.ATM.CO2E.KT NY.GDP.MKTP.CD SP.POP.TOTL GDP.per.capita CO2.per.capita
Z4 EAS East Asia & Pacific 2018 14810056.9 26416317598842 2338223462 11298 6.33
Z7 ECS Europe & Central Asia 2018 6142069.3 23217309660002 918031055 25290 6.69
ZJ LCN Latin America & Caribbean 2018 1689187.4 5703878670405 640483586 8906 2.64
ZQ MEA Middle East & North Africa 2018 2531611.8 3356566979106 448974232 7476 5.64
XU NAC North America 2018 5558099.3 22340938595870 363967296 61382 15.27
8S SAS South Asia 2018 2770040.0 3436593922938 1814455018 1894 1.53
ZG SSF Sub-Saharan Africa 2018 823424.7 1753414899266 1078319512 1626 0.76
  • commentaire : Nous avons extrait les données par grandes régions du Monde pour l’année 2018

3.1.6 Le format de sortie du tableau

Il existe deux façons d’extraire un tableau comprenant plusieurs variables ou plusieurs dates, selon que l’on veut un tableau large (wide) ou étroit. On peut régler la sortie à l’aide du paramètre return_wide qui est TRUE par défaut mais que l’on peut régler sur FALSE.

3.1.6.1 return_wide = FALSE

df   <- wb_data(indicator  = c("NY.GDP.MKTP.CD","SP.POP.TOTL","EN.ATM.CO2E.KT"),
                  return_wide = TRUE,
                  start_date = 2017,
                  end_date = 2018,
                  country = c("BEN","TGO"))
  df
# A tibble: 4 x 7
    iso2c iso3c country  date EN.ATM.CO2E.KT NY.GDP.MKTP.CD SP.POP.TOTL
    <chr> <chr> <chr>   <dbl>          <dbl>          <dbl>       <dbl>
  1 BJ    BEN   Benin    2017           7360   12701654743.    11175192
  2 BJ    BEN   Benin    2018           7910   14262407012.    11485035
  3 TG    TGO   Togo     2017           2070    6395472574.     7698476
  4 TG    TGO   Togo     2018           2260    7112200725.     7889095

3.1.6.2 return_wide = FALSE

df   <- wb_data(indicator  = c("NY.GDP.MKTP.CD","SP.POP.TOTL","EN.ATM.CO2E.KT"),
                  return_wide = FALSE,
                  start_date = 2017,
                  end_date = 2018,
                  country = c("BEN","TGO"))
  df[,1:7]
# A tibble: 12 x 7
     indicator_id   indicator          iso2c iso3c country  date        value
     <chr>          <chr>              <chr> <chr> <chr>   <dbl>        <dbl>
   1 NY.GDP.MKTP.CD GDP (current US$)  BJ    BEN   Benin    2018 14262407012.
   2 NY.GDP.MKTP.CD GDP (current US$)  BJ    BEN   Benin    2017 12701654743.
   3 NY.GDP.MKTP.CD GDP (current US$)  TG    TGO   Togo     2018  7112200725.
   4 NY.GDP.MKTP.CD GDP (current US$)  TG    TGO   Togo     2017  6395472574.
   5 SP.POP.TOTL    Population, total  BJ    BEN   Benin    2018    11485035 
   6 SP.POP.TOTL    Population, total  BJ    BEN   Benin    2017    11175192 
   7 SP.POP.TOTL    Population, total  TG    TGO   Togo     2018     7889095 
   8 SP.POP.TOTL    Population, total  TG    TGO   Togo     2017     7698476 
   9 EN.ATM.CO2E.KT CO2 emissions (kt) BJ    BEN   Benin    2018        7910 
  10 EN.ATM.CO2E.KT CO2 emissions (kt) BJ    BEN   Benin    2017        7360 
  11 EN.ATM.CO2E.KT CO2 emissions (kt) TG    TGO   Togo     2018        2260 
  12 EN.ATM.CO2E.KT CO2 emissions (kt) TG    TGO   Togo     2017        2070 

3.2 L’API Natural Earth

3.2.1 Natural Earth

Nous allons ici utiliser le fonds de carte Natural Earth qui est un fonds de carte libre de droit et mis à jour régulièrement. Le site web du projet se situe à l’adresse suivante :

https://www.naturalearthdata.com/

Il indique ses objectifs comme suit :

“Natural Earth is a public domain map dataset available at 1:10m, 1:50m, and 1:110 million scales. Featuring tightly integrated vector and raster data, with Natural Earth you can make a variety of visually pleasing, well-crafted maps with cartography or GIS software.[…] Natural Earth was built through a collaboration of many volunteers and is supported by NACIS (North American Cartographic Information Society), and is free for use in any type of project (see our Terms of Use page for more information).”

On peut télécharger les différents fonds de carte sur le site web, mais dans une perspective de mise à jour automatique régulière du fonds de carte il est plus pertinent d’utiliser l’API rnaturalearthqui permet d’accéder directement à la plupart des fonds de carte avec juste quelques lignes de code. Il suffit pour cela de commencer par installer et charger le package.

library("rnaturalearth")
  library("rnaturalearthdata")

3.2.2 le fonds de carte countries110 (175 unités)

On va télécharger tout d’abord le fonds de carte des pays du Monde avec une forte généralisation des contours countries110 et le transformer en objet de type spatial feature du package sf du package avant de le visualiser et d’ examiner le nombre d’unités

map<-st_as_sf(countries110)
  class(map)
[1] "sf"         "data.frame"
ggplot(data = map) +
          geom_sf(fill="lightyellow") +
          theme_bw()

Ce fonds de carte comporte 175 unités spatiales, mais de quoi s’agit-il exactement. Les métadonnées associées permettent de se faire une idée plus précise de la nature exacte de ces unités. Prenons pour cela quelques exempes

sel<-map[map$adm0_a3 %in% c("FRA", "NCL","ATA","ATF","USA", "PRI","CHN","TWN","MAR", "SAH","CHN","TWN","ISR","PSX"),c("sovereignt","sov_a3","type","admin", "adm0_a3","name","note_adm0","iso_a3","wb_a3")]
  kable(sel)
sovereignt sov_a3 type admin adm0_a3 name note_adm0 iso_a3 wb_a3 geometry
6 Antarctica ATA Indeterminate Antarctica ATA Antarctica NA ATA NA MULTIPOLYGON (((-59.57209 -…
7 France FR1 Dependency French Southern and Antarctic Lands ATF Fr. S. Antarctic Lands Fr. ATF NA MULTIPOLYGON (((68.935 -48….
30 China CH1 Country China CHN China NA CHN CHN MULTIPOLYGON (((110.3392 18…
55 France FR1 Country France FRA France NA FRA FRA MULTIPOLYGON (((-52.55642 2…
78 Israel ISR Sovereign country Israel ISR Israel NA ISR ISR MULTIPOLYGON (((35.71992 32…
99 Morocco MAR Sovereign country Morocco MAR Morocco NA MAR MAR MULTIPOLYGON (((-5.193863 3…
113 France FR1 Dependency New Caledonia NCL New Caledonia Fr. NCL NCL MULTIPOLYGON (((165.78 -21….
128 United States of America US1 Dependency Puerto Rico PRI Puerto Rico Commonwealth of U.S.A. PRI PRI MULTIPOLYGON (((-66.28243 1…
132 Israel ISR Disputed Palestine PSX Palestine Partial self-admin. PSE WBG MULTIPOLYGON (((35.54567 32…
137 Western Sahara SAH Indeterminate Western Sahara SAH W. Sahara Self admin. ESH NA MULTIPOLYGON (((-8.794884 2…
163 Taiwan TWN Sovereign country Taiwan TWN Taiwan NA TWN NA MULTIPOLYGON (((121.7778 24…
168 United States of America US1 Country United States of America USA United States NA USA USA MULTIPOLYGON (((-155.5421 1…

Les exemples présentés dans le tableau ci-dessus montrent la complexité du problème de définition et de représentation cartographique des “pays” ou “bouts du monde”. Quelques remarques :

  1. La France (FR1) en tant qu’état souverain regroupe ici cartographiquement la partie métropolitaine du pays et les Départements d’Outre-Mer (Guyane Française, Réunion, Martinique, Guadeloupe) en une seule entité spatiale, mais elle met à part la Nouvelle Calédonie et les îles antarctiques.
  2. Porto Rico (PRI) est considéré comme une dépendance des Etats-Unis (US1) au même titre que la Nouvelle Calédonie(NCL) est considérée comme une dépendance de la France (FR1).
  3. Le Sahara occidental (SAH) est considéré comme une zone indéterminée bien qu’il soit occupé par le Maroc (MAR).
  4. la Palestine (PSX) est considéré comme une zone disputée mais rattachée en terme de souveraineté à Israël (ISR) et une note précise qu’elle est partiellement semi-administrée. Le code sur trois caractères des territoires palestiniens est très variable selon les organisations (PSX, PSE, WBG).
  5. Taïwan (TWN) est présenté comme un état souverain, mais son code ISO3 est manquant pour la banque mondiale car la Chine refuse de le reconnaître.
  6. Plusieurs états souverains de petite taille sont absents de ce fonds de carte qui ne regroupe que 175 unités soit moins que les 193 pays membres des Nations-Unies. La plupart des îles du Pacifique sont en particulier éliminées car leur surface les rendrait invisible pour le degré de généralisation cartographique adopté.

3.2.3 le fonds de carte sovereignty110 (171 unités)

On peut obtenir un fonds différent en installant le package complémentaire rnaturalearthdata qui permet notamment de distinguer le fonds de carte des countries (c’est-à-dire des “bouts du monde” souverains ou non) et des sovereignty (c’est-à-dire des états souverains)

library(rnaturalearthdata)
  map<-st_as_sf(sovereignty110)
  
  ggplot(data = map) +
   geom_sf(fill="lightyellow") +  
    theme_bw()

Le fonds de carte permet désormais de récupérer la plupart des pays souverains du Monde, y compris les petits états insulaires du Pacifique, mais il fait disparaître de façon sélective les territoires indéterminés ou disputés. Ainsi, le Sahra Occidental demeure partiellement séparé du Maroc mais les territoires palestiniens sont annexés à Israël ainsi que le plateau du Golan ce qui n’est évidemment pas un choix neutred’un point de vue géoolitique.

par(mfrow=c(1,2))
  
  map2<-map %>% filter(sov_a3 %in% c("ISR","JOR","SYR","LBN","EGY"))
  ggplot(data = map2) +
      geom_sf(fill=c("gray80","orange","gray80","gray80","gray80")) +
      ggtitle("Limits of Israël") +
    theme_minimal()

map3<-map %>% filter(sov_a3 %in%c("MAR","SAH","DZA","MRT"))
  ggplot(data = map3) +
      geom_sf(fill=c("gray70","orange","gray70","lightyellow")) +
      ggtitle("Limits of Morocco") +
    theme_minimal()

3.2.4 Le fonds de carte countries50

On peut également choisir un fonds moins généralisé dans lequel tous les petits pays seront présents

map<-st_as_sf(countries50)
  ggplot(data = map) +
      geom_sf(fill="lightyellow") +
    theme_bw()

Il existe toute une série d’autres fonds de carte dans le package Natural Earth, notamment avec des résolutions plus précises, mais on se limitera ici à l’exploration des fonds de carte utile pour produire des cartes à contour généralisé couvrant le monde entier.

3.3 Exemple d’application

Nous allons essayer de constituer une carte des émissions de CO2 par habitant des pays de la CEDEAO en 2018 basée sur la combinaison des données wbstats et du fonds de carte naturalearth.

3.3.1 Etape 1 : récupération des données statistiques

Nous commençons par récupérer les données brutes de population et de CO2 en 2018 pour les pays de la CEDEAO et on y ajoute les latitues et longitues des centres des pays.

cedeao<-c("BEN","BFA","CPV","CIV", "GMB","GIN","GNB","GHA","LBR","MLI","NER","NGA","SEN","SLE","TGO")
  df   <- wb_data(indicator  = c("SP.POP.TOTL", "EN.ATM.CO2E.KT"),
                  return_wide = TRUE,
                  start_date = 2018,
                  end_date = 2018,
                  country = cedeao)
  kable(df)
iso2c iso3c country date EN.ATM.CO2E.KT SP.POP.TOTL
BJ BEN Benin 2018 7910 11485035
BF BFA Burkina Faso 2018 4270 19751466
CI CIV Cote d’Ivoire 2018 9910 25069226
CV CPV Cabo Verde 2018 620 543764
GH GHA Ghana 2018 16110 29767108
GN GIN Guinea 2018 3120 12414292
GM GMB Gambia, The 2018 570 2280092
GW GNB Guinea-Bissau 2018 310 1874304
LR LBR Liberia 2018 1320 4818976
ML MLI Mali 2018 5620 19077755
NE NER Niger 2018 2290 22442831
NG NGA Nigeria 2018 130670 195874685
SN SEN Senegal 2018 9860 15854324
SL SLE Sierra Leone 2018 1020 7650149
TG TGO Togo 2018 2260 7889095

Nous renommons les variables pour avoir un tableau plus simple ou la population est en millions d’habitants, les émissions de CO2 en millions de tonnes. On y ajoute l’intensité des émissions en tonnes par habitant.

don <-df %>% select(ISO3 = iso3c, NOM = country, POP = SP.POP.TOTL, CO2 = EN.ATM.CO2E.KT) %>%
              mutate(POP = POP/1000000, CO2 = CO2/1000, CO2_hab = CO2/POP)
  kable(don,digits = 2)
ISO3 NOM POP CO2 CO2_hab
BEN Benin 11.49 7.91 0.69
BFA Burkina Faso 19.75 4.27 0.22
CIV Cote d’Ivoire 25.07 9.91 0.40
CPV Cabo Verde 0.54 0.62 1.14
GHA Ghana 29.77 16.11 0.54
GIN Guinea 12.41 3.12 0.25
GMB Gambia, The 2.28 0.57 0.25
GNB Guinea-Bissau 1.87 0.31 0.17
LBR Liberia 4.82 1.32 0.27
MLI Mali 19.08 5.62 0.29
NER Niger 22.44 2.29 0.10
NGA Nigeria 195.87 130.67 0.67
SEN Senegal 15.85 9.86 0.62
SLE Sierra Leone 7.65 1.02 0.13
TGO Togo 7.89 2.26 0.29

3.3.2 Etape 2 : Récupération du fonds de carte

on récupère ensuite le fonds de carte en ne gardant que les pays de la CEDEAO

cedeao<-c("BEN","BFA","CPV","CIV", "GMB","GIN","GNB","GHA","LBR","MLI","NER","NGA","SEN","SLE","TGO")
  map<-st_as_sf(countries110)
  map<-st_as_sf(countries110) %>% 
          select(adm0_a3,geometry) %>% 
          rename(ISO3 = adm0_a3) %>%
          filter(ISO3 %in% cedeao)
  plot(map$geometry, col="lightyellow")

3.3.3 Etape 3 : Jointure du fonds de carte et des statistiques

mapdon <- right_join(don,map) %>% st_as_sf()
  kable(head(mapdon))
ISO3 NOM POP CO2 CO2_hab geometry
BEN Benin 11.485035 7.91 0.6887223 MULTIPOLYGON (((2.691702 6….
BFA Burkina Faso 19.751466 4.27 0.2161865 MULTIPOLYGON (((-2.827496 9…
CIV Cote d’Ivoire 25.069226 9.91 0.3953054 MULTIPOLYGON (((-2.856125 4…
GHA Ghana 29.767108 16.11 0.5412014 MULTIPOLYGON (((1.060122 5….
GIN Guinea 12.414292 3.12 0.2513232 MULTIPOLYGON (((-8.439298 7…
GMB Gambia, The 2.280092 0.57 0.2499899 MULTIPOLYGON (((-16.84152 1…

3.3.4 Etape 4 : Visualisation avec mapsf

mf_theme("agolalight")
  mapdon %>% 
    mf_map("CO2_hab", 
           "choro",
           breaks="jenks",
           leg_pos="bottomleft",
           leg_title = "en tonnes/hab.")%>%
    mf_map("CO2", 
           "prop",
           col="red",
           leg_pos = "topleft",
           leg_title = "en millions de tonnes")
  mf_title("Emissions de CO2 des pays de la CEDEAO en 2018")

Bibliographie

BARNIER, Julien, 2021. rmdformats: HTML Output Formats and Templates for ’rmarkdown’ Documents [en ligne]. S.l. : s.n. Disponible à l'adresse : https://github.com/juba/rmdformats.
R CORE TEAM, 2020. R: A Language and Environment for Statistical Computing [en ligne]. Vienna, Austria : R Foundation for Statistical Computing. Disponible à l'adresse : https://www.R-project.org/.
XIE, Yihui, 2020. knitr: A General-Purpose Package for Dynamic Report Generation in R [en ligne]. S.l. : s.n. Disponible à l'adresse : https://CRAN.R-project.org/package=knitr.

Annexes

Infos session

setting value
version R version 4.1.0 (2021-05-18)
os Windows 10 x64
system x86_64, mingw32
ui RTerm
language (EN)
collate French_France.1252
ctype French_France.1252
tz Europe/Paris
date 2021-12-17
package ondiskversion source
cowplot 1.1.1 CRAN (R 4.1.1)
data.table 1.14.0 CRAN (R 4.1.0)
dplyr 1.0.6 CRAN (R 4.1.0)
DT 0.18 CRAN (R 4.1.0)
explor 0.3.9 CRAN (R 4.1.1)
FactoMineR 2.4 CRAN (R 4.1.0)
ggplot2 3.3.3 CRAN (R 4.1.0)
knitr 1.34 CRAN (R 4.1.1)
leaflet 2.0.4.1 CRAN (R 4.1.1)
mapsf 0.2.0 CRAN (R 4.1.0)
mapview 2.10.0 CRAN (R 4.1.1)
rmarkdown 2.11 CRAN (R 4.1.1)
rnaturalearth 0.1.0 CRAN (R 4.1.2)
rnaturalearthdata 0.1.0 CRAN (R 4.1.2)
rzine 0.1.0 gitlab ()
sf 1.0.0 CRAN (R 4.1.0)
stargazer 5.2.2 CRAN (R 4.1.0)
tidyr 1.1.3 CRAN (R 4.1.0)
wbstats 1.0.4 CRAN (R 4.1.2)

Citation

@Manual{ficheRzine,
    title = {Titre de la fiche},
    author = {{Auteur.e.s}},
    organization = {Rzine},
    year = {202x},
    url = {http://rzine.fr/},
  }


Glossaire